package co.edu.usbcali.egrapico.logica;

/**
 * Clase para la traducci�n de la representaci�n de un
 * <Code>Programa</Code> desde <I>GraPiCO Textual</I> hacia <I>C�lculo PiCO</I>.
 * <P> Recibe en <I>GraPiCO Textual</I>:<P> <Blockquote><Pre> {(x-y)Imag.ext~Etiqueta_Programa:ParteL�gicaPrograma}
 * </Pre></Blockquote> <P> Traducci�n a <I>C�lculo PiCO</I> del constructor:<P> <Blockquote><Pre> ParteL�gicaPrograma</Pre></Blockquote>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005
 */
public class Program {

    // Variable para almacenar el programa representado en c�lculo PiCO.
    String programPico = "";
    // Variable para almacenar la parte l�gica del programa representado
    // en GraPiCO Textual.
    String programLogicalPartGPT = "";
    // Objeto de la clase ProgramLogicalPart
    ProgramLogicalPart programLogicalPart;
    // Variable para almacenar el nombre del proceso, en el caso en que
    // el programa pertenece a otro proceso.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de la clase
     * <Code>Program</Code>.<P> Separa la parte f�sica para obtener la
     * <Code>Parte L�gica del
     * Programa</Code> solo si el programa existe.
     *
     * @param programGraPicoT Expresi�n equivalente a la representaci�n de un
     * programa en <I>GraPiCO Textual</I>.
     * @param nameProcess Nombre del proceso al cual pertenece el
     * <Code>Programa</Code>.
     */
    public Program(String programGraPicoT, String nameProcess) {
        if (programGraPicoT.length() != 0) {
            // Obtiene el nombre del proceso al cual pertenece el programa
            nameCurrentProcess = nameProcess;
            programLogicalPartGPT = programGraPicoT.substring(programGraPicoT.indexOf(":") + 1, programGraPicoT.length() - 1);
        }
    }

    /**
     * M�todo generador de la traducci�n de un
     * <Code>Programa</Code>.<P> Obtiene la traducci�n de la
     * <Code>Parte L�gica del Programa</Code>.
     *
     * @return el
     * <Code>Programa</Code> traducida a <I>C�lculo PiCO</I>.
     */
    public String traslate() {
        if (programLogicalPartGPT.length() != 0) {
            programLogicalPart = new ProgramLogicalPart(programLogicalPartGPT, nameCurrentProcess);
            programPico = programLogicalPart.traslate();
        } else {
            programPico = "O";
        }
        return programPico;
    }
}